package com.example.redisdemo.apiIdempotent.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 在需要保证 接口幂等性 的Controller的方法上使用此注解
 * 实现思路:通过Redis + token机制实现接口幂等性校验
 * 为需要保证幂等性的每一次请求创建一个唯一标识token, 先获取token, 并将此token存入redis,
 * 请求接口时, 将此token放到header或者作为请求参数请求接口, 后端接口判断redis中是否存在此token:
 *
 * 如果存在, 正常处理业务逻辑, 并从redis中删除此token, 那么, 如果是重复请求, 由于token已被删除, 则不能通过校验, 返回请勿重复操作提示
 * 如果不存在, 说明参数不合法或者是重复请求, 返回提示即可
 *
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiIdempotent {
}
